 package com.itheima.util;

import lombok.extern.slf4j.Slf4j;

import javax.servlet.http.HttpServletRequest;

 /**
  * @author ShiXunDong
  * @DATE 2022/8/19 13:20
  */
 @Slf4j
 public class IpUtil {

     /**
      * 获取请求主机IP地址,如果通过代理进来，则透过防火墙获取真实IP地址;
      * @return 返回发起请求的ip地址
      */
     public static String getIpAddress(HttpServletRequest request){
         // 获取请求主机IP地址,如果通过代理进来，则透过防火墙获取真实IP地址
         try {
             String ip = request.getHeader("X-Forwarded-For");
             if (log.isInfoEnabled()) {
                 log.info("getIpAddress(HttpServletRequest) - X-Forwarded-For - String ip=" + ip);
             }
             if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                     ip = request.getHeader("Proxy-Client-IP");
                     if (log.isInfoEnabled()) {
                         log.info("getIpAddress(HttpServletRequest) - Proxy-Client-IP - String ip=" + ip);
                     }
                 }
                 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                     ip = request.getHeader("WL-Proxy-Client-IP");
                     if (log.isInfoEnabled()) {
                         log.info("getIpAddress(HttpServletRequest) - WL-Proxy-Client-IP - String ip=" + ip);
                     }
                 }
                 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                     ip = request.getHeader("HTTP_CLIENT_IP");
                     if (log.isInfoEnabled()) {
                         log.info("getIpAddress(HttpServletRequest) - HTTP_CLIENT_IP - String ip=" + ip);
                     }
                 }
                 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                     ip = request.getHeader("HTTP_X_FORWARDED_FOR");
                     if (log.isInfoEnabled()) {
                         log.info("getIpAddress(HttpServletRequest) - HTTP_X_FORWARDED_FOR - String ip=" + ip);
                     }
                 }
                 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                     ip = request.getRemoteAddr();
                     if (log.isInfoEnabled()) {
                         log.info("getIpAddress(HttpServletRequest) - getRemoteAddr - String ip=" + ip);
                     }
                 }
             } else if (ip.length() > 15) {
                 String[] ips = ip.split(",");
                 for (String s : ips) {
                     if (!("unknown".equalsIgnoreCase(s))) {
                         ip = s;
                         break;
                     }
                 }
             }
             return ip;
         } catch (Exception e) {
             return "127.0.0.1";
         }
     }
 }
